#include "common.hpp"

int main()
{
    // 1.创建命名管道
    umask(0);
    int ret = mkfifo(pipename.c_str(), 0666);
    if (ret < 0)
    {
        std::cerr << errno << ":" << strerror(errno) << std::endl;
        return 1;
    }

    // std::cout << "creat fifo success!!" << std::endl;
    // std::cout << "wait reader open" << std::endl;

    // 2.以写方式打开命名管道
    // 如果fifo读端尚未打开，client进程会卡在open这里
    int wfd = open(pipename.c_str(), O_WRONLY);
    if (wfd < 0)
    {
        std::cerr << errno << ":" << strerror(errno) << std::endl;
        return 1;
    }
    //std::cout << "open fifo success!!" << std::endl;

    //3.向管道中写入数据
    char buf[NUM] = {0};
    std::cout << "请输入您想要发送给服务端的信息: " << std::endl;
    while (true)
    {
        char *str = fgets(buf, sizeof(buf), stdin);
        assert(str);
        (void)str;

        int n = strlen(buf);
        buf[n - 1] = '\0'; // 消除'\n'

        if (strcasecmp(buf, "quit") == 0)
            break;

        int ret = write(wfd, buf, sizeof(buf));
        assert(ret > 0);
        (void)ret;
    }

    // std::cout << "wait write..." << std::endl;
    // // const char* msg = "i am process A";
    // // int n = write(wfd,msg,strlen(msg));
    // // assert(n>0);
    // // (void)n;

    // const char *msg = "i am process cilent ";
    // while (true)
    // {
    //     int n = write(wfd, msg, strlen(msg));
    //     assert(n > 0);
    //     (void)n;
    //     sleep(1);
    // }

    // 4.退出，关闭写端
    close(wfd);
    unlink(pipename.c_str());

    return 0;
}